using System;
using System.Collections.Generic;
using ns26;
using ns27;

namespace Triton.Game.Mapping
{
	[Attribute38("Entity")]
	public class Entity : EntityBase
	{
		public enum LoadState
		{
			INVALID,
			PENDING,
			LOADING,
			DONE
		}

		public EntityDef m_staticEntityDef => method_3<EntityDef>("m_staticEntityDef");

		public EntityDef m_dynamicEntityDef => method_3<EntityDef>("m_dynamicEntityDef");

		public Card m_card => method_3<Card>("m_card");

		public LoadState m_loadState => method_2<LoadState>("m_loadState");

		public int m_cardAssetLoadCount => method_2<int>("m_cardAssetLoadCount");

		public bool m_useBattlecryPower => method_2<bool>("m_useBattlecryPower");

		public bool m_duplicateForHistory => method_2<bool>("m_duplicateForHistory");

		public CardTextHistoryData m_cardTextHistoryData => method_3<CardTextHistoryData>("m_cardTextHistoryData");

		public List<Entity> m_attachments => method_3<Class271<Entity>>("m_attachments")?.method_25();

		public List<int> m_subCardIDs => method_3<Class270<int>>("m_subCardIDs")?.method_25();

		public int m_realTimeCost => method_2<int>("m_realTimeCost");

		public int m_realTimeAttack => method_2<int>("m_realTimeAttack");

		public int m_realTimeHealth => method_2<int>("m_realTimeHealth");

		public int m_realTimeDamage => method_2<int>("m_realTimeDamage");

		public int m_realTimeArmor => method_2<int>("m_realTimeArmor");

		public bool m_realTimePoweredUp => method_2<bool>("m_realTimePoweredUp");

		public bool m_realTimeDivineShield => method_2<bool>("m_realTimeDivineShield");

		public bool m_realTimeIsImmune => method_2<bool>("m_realTimeIsImmune");

		public bool m_realTimeIsPoisonous => method_2<bool>("m_realTimeIsPoisonous");

		public bool m_realTimeCardCostsHealth => method_2<bool>("m_realTimeCardCostsHealth");

		public TAG_CARDTYPE m_realTimeCardType => method_2<TAG_CARDTYPE>("m_realTimeCardType");

		public int m_queuedChangeEntityCount => method_2<int>("m_queuedChangeEntityCount");

		public Entity(IntPtr address, string className)
			: base(address, className)
		{
		}

		public Entity(IntPtr address)
			: this(address, "Entity")
		{
		}

		public new string ToString()
		{
			return method_13("ToString");
		}

		public void OnRealTimeFullEntity(Network.HistFullEntity fullEntity)
		{
			method_8("OnRealTimeFullEntity", fullEntity);
		}

		public void OnFullEntity(Network.HistFullEntity fullEntity)
		{
			method_8("OnFullEntity", fullEntity);
		}

		public void OnRealTimeShowEntity(Network.HistShowEntity showEntity)
		{
			method_8("OnRealTimeShowEntity", showEntity);
		}

		public void OnShowEntity(Network.HistShowEntity showEntity)
		{
			method_8("OnShowEntity", showEntity);
		}

		public void OnRealTimeChangeEntity(Network.HistChangeEntity changeEntity)
		{
			method_8("OnRealTimeChangeEntity", changeEntity);
		}

		public void OnChangeEntity(Network.HistChangeEntity changeEntity)
		{
			method_8("OnChangeEntity", changeEntity);
		}

		public bool IsTagChanged(Network.HistChangeEntity changeEntity, GAME_TAG tag)
		{
			return method_11<bool>("IsTagChanged", new object[2] { changeEntity, tag });
		}

		public bool ShouldUpdateActorOnChangeEntity(Network.HistChangeEntity changeEntity)
		{
			return method_11<bool>("ShouldUpdateActorOnChangeEntity", new object[1] { changeEntity });
		}

		public void OnRealTimeTagChanged(Network.HistTagChange change)
		{
			method_8("OnRealTimeTagChanged", change);
		}

		public void OnTagsChanged(TagDeltaList changeList)
		{
			method_8("OnTagsChanged", changeList);
		}

		public void OnTagChanged(TagDelta change)
		{
			method_8("OnTagChanged", change);
		}

		public void OnMetaData(Network.HistMetaData metaData)
		{
			method_8("OnMetaData", metaData);
		}

		public void HandleRealTimeEntityChange(Network.Entity netEntity)
		{
			method_8("HandleRealTimeEntityChange", netEntity);
		}

		public void HandleEntityChange(Network.Entity netEntity, bool updateActor)
		{
			method_8("HandleEntityChange", netEntity, updateActor);
		}

		public void HandleTagChange(TagDelta change)
		{
			method_8("HandleTagChange", change);
		}

		public void CheckZoneChangeForEnchantment(TagDelta change)
		{
			method_8("CheckZoneChangeForEnchantment", change);
		}

		public bool IsNameChange(TagDelta change)
		{
			return method_11<bool>("IsNameChange", new object[1] { change });
		}

		public EntityDef GetEntityDef()
		{
			return method_14<EntityDef>("GetEntityDef", Array.Empty<object>());
		}

		public EntityDef GetOrCreateDynamicDefinition()
		{
			return method_14<EntityDef>("GetOrCreateDynamicDefinition", Array.Empty<object>());
		}

		public Card InitCard()
		{
			return method_14<Card>("InitCard", Array.Empty<object>());
		}

		public CardDef GetCardDef()
		{
			return method_14<CardDef>("GetCardDef", Array.Empty<object>());
		}

		public CardDef GetCardDefForHistory()
		{
			return method_14<CardDef>("GetCardDefForHistory", Array.Empty<object>());
		}

		public Card GetCard()
		{
			return method_14<Card>("GetCard", Array.Empty<object>());
		}

		public void SetCard(Card card)
		{
			method_8("SetCard", card);
		}

		public void Destroy()
		{
			method_8("Destroy");
		}

		public LoadState GetLoadState()
		{
			return method_11<LoadState>("GetLoadState", Array.Empty<object>());
		}

		public bool IsLoadingAssets()
		{
			return method_11<bool>("IsLoadingAssets", Array.Empty<object>());
		}

		public bool IsBusy()
		{
			return method_11<bool>("IsBusy", Array.Empty<object>());
		}

		public bool IsHidden()
		{
			return method_11<bool>("IsHidden", Array.Empty<object>());
		}

		public bool HasQueuedChangeEntity()
		{
			return method_11<bool>("HasQueuedChangeEntity", Array.Empty<object>());
		}

		public void ClearTags()
		{
			method_8("ClearTags");
		}

		public TagDelta SetTagAndHandleChange(int tag, int tagValue)
		{
			return method_15<TagDelta>("SetTagAndHandleChange", new Class276.Enum20[2]
			{
				Class276.Enum20.I4,
				Class276.Enum20.I4
			}, new object[2] { tag, tagValue });
		}

		public new int GetReferencedTag(int tag)
		{
			return method_11<int>("GetReferencedTag", new object[1] { tag });
		}

		public int GetDefCost()
		{
			return method_11<int>("GetDefCost", Array.Empty<object>());
		}

		public int GetDefATK()
		{
			return method_11<int>("GetDefATK", Array.Empty<object>());
		}

		public int GetDefHealth()
		{
			return method_11<int>("GetDefHealth", Array.Empty<object>());
		}

		public int GetDefDurability()
		{
			return method_11<int>("GetDefDurability", Array.Empty<object>());
		}

		public TAG_RACE GetRace()
		{
			return GetEntityDef().GetRace();
		}

		public new TAG_CLASS GetClass()
		{
			return method_11<TAG_CLASS>("GetClass", Array.Empty<object>());
		}

		public TAG_ENCHANTMENT_VISUAL GetEnchantmentBirthVisual()
		{
			return method_11<TAG_ENCHANTMENT_VISUAL>("GetEnchantmentBirthVisual", Array.Empty<object>());
		}

		public TAG_ENCHANTMENT_VISUAL GetEnchantmentIdleVisual()
		{
			return method_11<TAG_ENCHANTMENT_VISUAL>("GetEnchantmentIdleVisual", Array.Empty<object>());
		}

		public TAG_RARITY GetRarity()
		{
			return method_11<TAG_RARITY>("GetRarity", Array.Empty<object>());
		}

		public new TAG_CARD_SET GetCardSet()
		{
			return method_11<TAG_CARD_SET>("GetCardSet", Array.Empty<object>());
		}

		public TAG_PREMIUM GetPremiumType()
		{
			return method_11<TAG_PREMIUM>("GetPremiumType", Array.Empty<object>());
		}

		public bool CanBeDamagedRealTime()
		{
			return method_11<bool>("CanBeDamagedRealTime", Array.Empty<object>());
		}

		public int GetCurrentHealth()
		{
			return method_11<int>("GetCurrentHealth", Array.Empty<object>());
		}

		public int GetCurrentDurability()
		{
			return method_11<int>("GetCurrentDurability", Array.Empty<object>());
		}

		public int GetCurrentDefense()
		{
			return method_11<int>("GetCurrentDefense", Array.Empty<object>());
		}

		public int GetCurrentVitality()
		{
			return method_11<int>("GetCurrentVitality", Array.Empty<object>());
		}

		public Player GetController()
		{
			return method_14<Player>("GetController", Array.Empty<object>());
		}

		public Player.Side GetControllerSide()
		{
			return method_11<Player.Side>("GetControllerSide", Array.Empty<object>());
		}

		public bool IsControlledByLocalUser()
		{
			return method_11<bool>("IsControlledByLocalUser", Array.Empty<object>());
		}

		public bool IsControlledByFriendlySidePlayer()
		{
			return method_11<bool>("IsControlledByFriendlySidePlayer", Array.Empty<object>());
		}

		public bool IsControlledByOpposingSidePlayer()
		{
			return method_11<bool>("IsControlledByOpposingSidePlayer", Array.Empty<object>());
		}

		public bool IsControlledByRevealedPlayer()
		{
			return method_11<bool>("IsControlledByRevealedPlayer", Array.Empty<object>());
		}

		public bool IsControlledByConcealedPlayer()
		{
			return method_11<bool>("IsControlledByConcealedPlayer", Array.Empty<object>());
		}

		public Entity GetCreator()
		{
			return method_14<Entity>("GetCreator", Array.Empty<object>());
		}

		public Entity GetDisplayedCreator()
		{
			return method_14<Entity>("GetDisplayedCreator", Array.Empty<object>());
		}

		public Entity GetHero()
		{
			return method_14<Entity>("GetHero", Array.Empty<object>());
		}

		public Card GetHeroCard()
		{
			return method_14<Card>("GetHeroCard", Array.Empty<object>());
		}

		public Entity GetHeroPower()
		{
			return method_14<Entity>("GetHeroPower", Array.Empty<object>());
		}

		public Card GetHeroPowerCard()
		{
			return method_14<Card>("GetHeroPowerCard", Array.Empty<object>());
		}

		public Card GetWeaponCard()
		{
			return method_14<Card>("GetWeaponCard", Array.Empty<object>());
		}

		public bool HasValidDisplayName()
		{
			return method_11<bool>("HasValidDisplayName", Array.Empty<object>());
		}

		public string GetName()
		{
			return method_13("GetName");
		}

		public string GetDebugName()
		{
			return method_13("GetDebugName");
		}

		public void UpdateCardName()
		{
			method_8("UpdateCardName");
		}

		public string GetCardTextInHand()
		{
			return method_13("GetCardTextInHand");
		}

		public string GetCardTextInHistory()
		{
			return method_13("GetCardTextInHistory");
		}

		public string GetTargetingArrowText()
		{
			return method_13("GetTargetingArrowText");
		}

		public string GetRaceText()
		{
			return method_13("GetRaceText");
		}

		public void AddAttachment(Entity entity)
		{
			method_8("AddAttachment", entity);
		}

		public void RemoveAttachment(Entity entity)
		{
			method_8("RemoveAttachment", entity);
		}

		public void AddSubCard(Entity entity)
		{
			method_8("AddSubCard", entity);
		}

		public void RemoveSubCard(Entity entity)
		{
			method_8("RemoveSubCard", entity);
		}

		public List<Entity> GetAttachments()
		{
			return method_14<Class271<Entity>>("GetAttachments", Array.Empty<object>())?.method_25();
		}

		public bool DoEnchantmentsHaveTriggerVisuals()
		{
			return method_11<bool>("DoEnchantmentsHaveTriggerVisuals", Array.Empty<object>());
		}

		public bool IsEnchanted()
		{
			return method_11<bool>("IsEnchanted", Array.Empty<object>());
		}

		public bool IsEnchantment()
		{
			return method_11<bool>("IsEnchantment", Array.Empty<object>());
		}

		public bool IsDarkWandererSecret()
		{
			return method_11<bool>("IsDarkWandererSecret", Array.Empty<object>());
		}

		public List<Entity> GetEnchantments()
		{
			return method_14<Class271<Entity>>("GetEnchantments", Array.Empty<object>())?.method_25();
		}

		public bool HasSubCards()
		{
			return method_11<bool>("HasSubCards", Array.Empty<object>());
		}

		public List<int> GetSubCardIDs()
		{
			return method_14<Class270<int>>("GetSubCardIDs", Array.Empty<object>())?.method_25();
		}

		public int GetSubCardIndex(Entity entity)
		{
			return method_11<int>("GetSubCardIndex", new object[1] { entity });
		}

		public Entity GetParentEntity()
		{
			return method_14<Entity>("GetParentEntity", Array.Empty<object>());
		}

		public CardTextBuilder GetCardTextBuilder()
		{
			return method_14<CardTextBuilder>("GetCardTextBuilder", Array.Empty<object>());
		}

		public Entity CloneForZoneMgr()
		{
			return method_14<Entity>("CloneForZoneMgr", Array.Empty<object>());
		}

		public Entity CloneForHistory(HistoryInfo historyInfo)
		{
			return method_14<Entity>("CloneForHistory", new object[1] { historyInfo });
		}

		public bool IsHistoryDupe()
		{
			return method_11<bool>("IsHistoryDupe", Array.Empty<object>());
		}

		public int GetJadeGolem()
		{
			return method_11<int>("GetJadeGolem", Array.Empty<object>());
		}

		public int GetDamageBonus()
		{
			return method_11<int>("GetDamageBonus", Array.Empty<object>());
		}

		public int GetDamageBonusDouble()
		{
			return method_11<int>("GetDamageBonusDouble", Array.Empty<object>());
		}

		public int GetHealingDouble()
		{
			return method_11<int>("GetHealingDouble", Array.Empty<object>());
		}

		public void ClearBattlecryFlag()
		{
			method_8("ClearBattlecryFlag");
		}

		public bool ShouldUseBattlecryPower()
		{
			return method_11<bool>("ShouldUseBattlecryPower", Array.Empty<object>());
		}

		public void UpdateUseBattlecryFlag(bool fromGameState)
		{
			method_8("UpdateUseBattlecryFlag", fromGameState);
		}

		public void SetRealTimeCost(int newCost)
		{
			method_8("SetRealTimeCost", newCost);
		}

		public int GetRealTimeCost()
		{
			return method_11<int>("GetRealTimeCost", Array.Empty<object>());
		}

		public void SetRealTimeAttack(int newAttack)
		{
			method_8("SetRealTimeAttack", newAttack);
		}

		public int GetRealTimeAttack()
		{
			return method_11<int>("GetRealTimeAttack", Array.Empty<object>());
		}

		public void SetRealTimeHealth(int newHealth)
		{
			method_8("SetRealTimeHealth", newHealth);
		}

		public void SetRealTimeDamage(int newDamage)
		{
			method_8("SetRealTimeDamage", newDamage);
		}

		public void SetRealTimeArmor(int newArmor)
		{
			method_8("SetRealTimeArmor", newArmor);
		}

		public int GetRealTimeRemainingHP()
		{
			return method_11<int>("GetRealTimeRemainingHP", Array.Empty<object>());
		}

		public void SetRealTimePoweredUp(int poweredUp)
		{
			method_8("SetRealTimePoweredUp", poweredUp);
		}

		public bool GetRealTimePoweredUp()
		{
			return method_11<bool>("GetRealTimePoweredUp", Array.Empty<object>());
		}

		public void SetRealTimeDivineShield(int divineShield)
		{
			method_8("SetRealTimeDivineShield", divineShield);
		}

		public bool GetRealTimeDivineShield()
		{
			return method_11<bool>("GetRealTimeDivineShield", Array.Empty<object>());
		}

		public void SetRealTimeIsImmune(int immune)
		{
			method_8("SetRealTimeIsImmune", immune);
		}

		public bool GetRealTimeIsImmune()
		{
			return method_11<bool>("GetRealTimeIsImmune", Array.Empty<object>());
		}

		public void SetRealTimeIsPoisonous(int poisonous)
		{
			method_8("SetRealTimeIsPoisonous", poisonous);
		}

		public bool GetRealTimeIsPoisonous()
		{
			return method_11<bool>("GetRealTimeIsPoisonous", Array.Empty<object>());
		}

		public void SetRealTimeCardCostsHealth(int value)
		{
			method_8("SetRealTimeCardCostsHealth", value);
		}

		public bool GetRealTimeCardCostsHealth()
		{
			return method_11<bool>("GetRealTimeCardCostsHealth", Array.Empty<object>());
		}

		public void SetRealTimeCardType(TAG_CARDTYPE cardType)
		{
			method_8("SetRealTimeCardType", cardType);
		}

		public TAG_CARDTYPE GetRealTimeCardType()
		{
			return method_11<TAG_CARDTYPE>("GetRealTimeCardType", Array.Empty<object>());
		}

		public CardTextHistoryData GetCardTextHistoryData()
		{
			return method_14<CardTextHistoryData>("GetCardTextHistoryData", Array.Empty<object>());
		}

		public void LoadEntityDef(string cardId)
		{
			method_8("LoadEntityDef", cardId);
		}

		public void LoadCard(string cardId, bool updateActor)
		{
			method_8("LoadCard", cardId, updateActor);
		}

		public void OnCardDefLoaded(string cardId, CardDef cardDef, object callbackData)
		{
			method_8("OnCardDefLoaded", cardId, cardDef, callbackData);
		}

		public SpellType GetPrioritizedBaubleSpellType()
		{
			return method_11<SpellType>("GetPrioritizedBaubleSpellType", Array.Empty<object>());
		}
	}
}
